package org.quincy.rock.core.dao;

import java.lang.annotation.Annotation;

import org.quincy.rock.core.util.StringUtil;

/**
 * <b>EntityMetadataEx。</b>
 * <p><b>详细说明：</b></p>
 * <!-- 在此添加详细说明 -->
 * 无。
 * 
 * @version 1.0
 * @author mex2000
 * @since 1.0
 */
public class EntityMetadataEx extends EntityMetadata {
	/**
	 * 表名或列名转换器。
	 */
	private NameInterceptor defaultNameConverter;

	/**
	 * <b>构造方法。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @param entityType 实体类型
	 */
	public EntityMetadataEx(Class<?> entityType) {
		super(entityType);
	}

	/**
	 * <b>构造方法。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @param clazz 实体类型
	 * @param transientClasses 忽略持久化的注解类
	 */
	@SafeVarargs
	public EntityMetadataEx(Class<?> entityType, Class<? extends Annotation>... transientClasses) {
		super(entityType, transientClasses);
	}

	public NameInterceptor getDefaultNameConverter() {
		return defaultNameConverter;
	}

	public void setDefaultNameConverter(NameInterceptor defaultNameConverter) {
		this.defaultNameConverter = defaultNameConverter;
	}

	@Override
	public String columnName(String name) {
		String colName = super.columnName(name);
		if (StringUtil.isBlank(colName) && defaultNameConverter != null) {
			colName = defaultNameConverter.applyColumnName(name).toString();
		}
		return colName;
	}

	@Override
	public String tableName() {
		String tableName = super.tableName();
		if (StringUtil.isBlank(tableName) && defaultNameConverter != null)
			tableName = defaultNameConverter.applyTableName(entityName()).toString();
		return tableName;
	}

}
